/**
 * @file ICommunicationStrategy.h
 * @brief 通信策略接口定义
 * @author Your Name
 * @date 2025-03-30
 */

#ifndef ICOMMUNICATIONSTRATEGY_H
#define ICOMMUNICATIONSTRATEGY_H

#include <QObject>
#include <QByteArray>
#include <QVariantMap>

/**
 * @brief 通信策略接口类
 * @details 定义所有通信方式必须实现的接口，支持依赖注入
 */
class ICommunicationStrategy : public QObject {
    Q_OBJECT
public:
    explicit ICommunicationStrategy(QObject *parent = nullptr);
    virtual ~ICommunicationStrategy() = default;

    /**
     * @brief 初始化通信策略
     * @param config 配置参数映射
     * @return 是否初始化成功
     */
    virtual bool init(const QVariantMap& config) = 0;

    /**
     * @brief 打开通信连接
     * @return 是否成功打开
     */
    virtual bool open() = 0;

    /**
     * @brief 关闭通信连接
     */
    virtual void close() = 0;

    /**
     * @brief 发送数据
     * @param data 要发送的数据
     * @return 实际发送的字节数
     */
    virtual qint64 send(const QByteArray& data) = 0;

    /**
     * @brief 是否已连接
     * @return 连接状态
     */
    virtual bool isConnected() const = 0;

signals:
    /**
     * @brief 数据接收信号
     * @param data 接收到的数据
     */
    void dataReceived(const QByteArray& data);

    /**
     * @brief 连接状态变化信号
     * @param connected 是否已连接
     */
    void connectionChanged(bool connected);

    /**
     * @brief 错误发生信号
     * @param code 错误码
     * @param message 错误信息
     */
    void errorOccurred(int code, const QString& message);
};

#endif // ICOMMUNICATIONSTRATEGY_H
